# dash_doc

Структура контейнера DASH (Dynamic Adaptive Streaming over HTTP) можно представить в виде таблицы, описывающей ключевые компоненты и их назначение. 

Вот таблица с описанием структуры контейнера DASH:

| **Компонент**           | **Описание**                                                                                                   |
|-------------------------|----------------------------------------------------------------------------------------------------------------|
| **MPD (Media Presentation Description)** | Основной манифест, описывающий структуру и содержимое потока, включая информацию о периодах, адаптационных наборах, представлениях и сегментах. |
| **Period**              | Отдельный временной интервал в MPD, содержащий один или несколько адаптационных наборов.                                          |
| **Adaptation Set**      | Набор представлений одного типа контента (например, видео или аудио), предназначенных для адаптивного потока.                     |
| **Representation**      | Конкретное представление контента в адаптационном наборе, включающее параметры, такие как кодек, разрешение и битрейт.             |
| **Segment Template**    | Шаблон для формирования URL сегментов, содержащий информацию о формате сегментов и их именах.                                      |
| **Initialization Segment** | Начальный сегмент, содержащий информацию для декодирования последующих медиа-сегментов (например, заголовки кодека).                |
| **Media Segment**       | Основные сегменты медиа данных, содержащие видео, аудио или другие медиа данные.                                                    |
| **Index Segment**       | Сегмент, содержащий индексную информацию для доступа к медиа-сегментам (например, sidx box).                                        |
| **Bitstream Switching Segment** | Сегмент, позволяющий плавно переключаться между различными битрейтами в адаптивном потоке.                                      |

### Описание ключевых элементов

- **MPD**:
  - Содержит метаданные о контенте, такие как длительность, доступные адаптационные наборы и представления.
  
- **Period**:
  - Определяет временные интервалы, может содержать рекламу или дополнительные видео фрагменты.

- **Adaptation Set**:
  - Группирует представления одного типа, может содержать несколько кодеков или разрешений.

- **Representation**:
  - Конкретный вариант медиа контента с определенными характеристиками, такими как битрейт и разрешение.

- **Segment Template**:
  - Используется для генерации URL для сегментов, упрощая их адресацию и доступ.

- **Initialization Segment**:
  - Включает информацию, необходимую для начала воспроизведения, например, заголовки кодека.

- **Media Segment**:
  - Основные сегменты, содержащие данные для воспроизведения медиа контента.

- **Index Segment**:
  - Содержит информацию об офсетах и длительностях медиа-сегментов, что облегчает их поиск и доступ.

- **Bitstream Switching Segment**:
  - Позволяет менять битрейт без прерывания воспроизведения, поддерживая адаптивное потоковое вещание.

Эта структура обеспечивает гибкость и масштабируемость DASH, позволяя адаптивно изменять качество потока в зависимости от условий сети и устройства пользователя.



Для связи структуры контейнера DASH с исходным кодом библиотеки `universal-dash-transmuxer`, нужно рассмотреть, как ключевые компоненты DASH обрабатываются в коде. Ниже приведена таблица с основными компонентами DASH и соответствующими частями исходного кода.

### Таблица: Соответствие компонентов DASH исходному коду библиотеки

| **Компонент**           | **Описание**                                                                                                   | **Исходный код (файл)**                                                                                           |
|-------------------------|----------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------|
| **MPD (Media Presentation Description)** | Основной манифест, описывающий структуру и содержимое потока, включая информацию о периодах, адаптационных наборах, представлениях и сегментах. | `library/tools/OSX/ToolsMpdParser.h` и `library/tools/OSX/ToolsMpdParser.mm`                                      |
| **Period**              | Отдельный временной интервал в MPD, содержащий один или несколько адаптационных наборов.                                          | `library/tools/OSX/ToolsMpdParser.mm` (часть обработки MPD)                                                       |
| **Adaptation Set**      | Набор представлений одного типа контента (например, видео или аудио), предназначенных для адаптивного потока.                     | `library/tools/OSX/ToolsMpdParser.mm` (часть обработки MPD)                                                       |
| **Representation**      | Конкретное представление контента в адаптационном наборе, включающее параметры, такие как кодек, разрешение и битрейт.             | `library/tools/OSX/ToolsMpdParser.mm` (часть обработки MPD)                                                       |
| **Segment Template**    | Шаблон для формирования URL сегментов, содержащий информацию о формате сегментов и их именах.                                      | `library/tools/OSX/ToolsMpdParser.mm` (часть обработки MPD)                                                       |
| **Initialization Segment** | Начальный сегмент, содержащий информацию для декодирования последующих медиа-сегментов (например, заголовки кодека).                | `library/dash/avcc_contents.h`, `library/dash/avcc_contents.cc`, `library/dash/box.h` (парсинг box'ов)            |
| **Media Segment**       | Основные сегменты медиа данных, содержащие видео, аудио или другие медиа данные.                                                    | `library/dash/mdat_contents.h`, `library/dash/mdat_contents.cc`                                                   |
| **Index Segment**       | Сегмент, содержащий индексную информацию для доступа к медиа-сегментам (например, sidx box).                                        | `library/dash/sidx_contents.h`, `library/dash/sidx_contents.cc`                                                   |
| **Bitstream Switching Segment** | Сегмент, позволяющий плавно переключаться между различными битрейтами в адаптивном потоке.                                      | `library/dash_to_hls_api.cc` (общая обработка переключения битрейтов)                                             |

### Описание соответствий

1. **MPD (Media Presentation Description)**:
   - **Исходный код**: Парсинг MPD осуществляется в файлах `ToolsMpdParser.h` и `ToolsMpdParser.mm`. Эти файлы содержат функции для обработки и разбора MPD-файлов, извлекая информацию о периодах, адаптационных наборах и представлениях.

2. **Period, Adaptation Set, Representation, Segment Template**:
   - **Исходный код**: Эти компоненты также обрабатываются в файлах `ToolsMpdParser.h` и `ToolsMpdParser.mm`, так как они являются частью структуры MPD. Эти файлы отвечают за извлечение и обработку информации о каждом из этих компонентов.

3. **Initialization Segment**:
   - **Исходный код**: Файлы `avcc_contents.h`, `avcc_contents.cc`, и `box.h` обрабатывают начальные сегменты, такие как avcC box, который содержит информацию, необходимую для декодирования последующих медиа-сегментов.

4. **Media Segment**:
   - **Исходный код**: Файлы `mdat_contents.h` и `mdat_contents.cc` обрабатывают основные медиа-сегменты, содержащие аудио или видео данные.

5. **Index Segment**:
   - **Исходный код**: Файлы `sidx_contents.h` и `sidx_contents.cc` обрабатывают индексные сегменты, которые содержат информацию для доступа к медиа-сегментам.

6. **Bitstream Switching Segment**:
   - **Исходный код**: Файл `dash_to_hls_api.cc` содержит функции для общей обработки и преобразования DASH в HLS, включая обработку переключения битрейтов.

